﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;

namespace BLL
{
    public class ChiTietHoaDonBanBUO:IBUO<tbl_HoaDonBan_Hang>
    {
        CSDLBanHangDataContext context = new CSDLBanHangDataContext();
        public bool Insert(tbl_HoaDonBan_Hang obj)
        {
            try
            {
                context.tbl_HoaDonBan_Hangs.InsertOnSubmit(obj);
                context.SubmitChanges();
                return true;
            }
            catch (Exception)
            {

                return false;
            }
        }

        public bool Delete(string id)
        {
            throw new NotImplementedException();
        }

        public bool Delete(tbl_HoaDonBan_Hang obj)
        {
            throw new NotImplementedException();
        }
        /// <summary>
        /// Xóa hàng hóa ra khỏi chi tiết hóa đơn bán tbl_HoaDonBan_Hang
        /// </summary>
        /// <param name="idHang"></param>
        /// <param name="idHoaDonBan"></param>
        /// <returns></returns>
        public bool Delete(string idHang, string idHoaDonBan)
        {
            try
            {
                tbl_HoaDonBan_Hang obj = context.tbl_HoaDonBan_Hangs.Where(n => n.id_HoaDonBan.Equals(idHoaDonBan) && n.id_Hang.Equals(idHang)).ToList<tbl_HoaDonBan_Hang>().FirstOrDefault();
                if (obj != null)
                {
                    context.tbl_HoaDonBan_Hangs.DeleteOnSubmit(obj);
                    context.SubmitChanges();
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception)
            {

                return false;
            }
        }

        /// <summary>
        /// Hiển thị chi tiết hóa đơn bán
        /// </summary>
        /// <param name="idHoaDonBan"></param>
        /// <returns></returns>
        public IQueryable ChiTietHoaDonBan(String idHoaDonBan)
        {
            var list = context.tbl_HoaDonBans.Join(
                context.tbl_NhanViens,
                a => a.id_NhanVien,
                b => b.id_NhanVien,
                (a, b) => new
                {
                    id_HoaDonBan = a.id_HoaDonBan,
                    id_NhanVien = a.id_NhanVien,
                    id_Khach = a.id_Khach,
                    TenNhanVien = b.TenNhanVien,
                    NgayBan = a.NgayBan
                }
                ).Join(
                context.tbl_Khaches,
                c => c.id_Khach,
                d => d.id_Khach,
                (c, d) => new
                {
                    id_HoaDonBan = c.id_HoaDonBan,
                    id_NhanVien = c.id_NhanVien,
                    TenKhach = d.TenKhach,
                    TenNhanVien = c.TenNhanVien,
                    NgayBan = c.NgayBan
                }
                ).Join(
                context.tbl_HoaDonBan_Hangs,
                f => f.id_HoaDonBan,
                g => g.id_HoaDonBan,
                (f, g) => new
                {
                    id_HoaDonBan = f.id_HoaDonBan,
                    id_Hang = g.id_Hang,
                    id_NhanVien = f.id_NhanVien,
                    TenKhach = f.TenKhach,
                    TenNhanVien = f.TenNhanVien,
                    SoLuong = g.SoLuong,
                    NgayBan = f.NgayBan
                }
                ).Join(
                context.tbl_Hangs,
                h => h.id_Hang,
                k => k.id_Hang,
                (h, k) => new
                {
                    id_HoaDonBan = h.id_HoaDonBan,
                    id_Hang = h.id_Hang,
                    id_NhanVien = h.id_NhanVien,
                    TenHang = k.TenHang,
                    TenKhach = h.TenKhach,
                    TenNhanVien = h.TenNhanVien,
                    SoLuong = h.SoLuong,
                    DonGia=k.DonGia+k.DonGia*0.05,
                    ThanhTien = h.SoLuong * (k.DonGia + k.DonGia * 0.05),
                    NgayBan = h.NgayBan
                }

                ).Where(n => n.id_HoaDonBan.Equals(idHoaDonBan));
            return list;
        }
        public List<tbl_HoaDonBan_Hang> GetAll()
        {
            throw new NotImplementedException();
        }

        public tbl_HoaDonBan_Hang GetSingle(string id)
        {
            throw new NotImplementedException();
        }

        public bool Update(string id, tbl_HoaDonBan_Hang obj)
        {
            throw new NotImplementedException();
        }

        public bool Update(string idHoaDonBan, string idHang, tbl_HoaDonBan_Hang obj)
        {
            try
            {
                tbl_HoaDonBan_Hang tblNCC = context.tbl_HoaDonBan_Hangs.Where(n => n.id_HoaDonBan.Trim().Equals(idHoaDonBan.Trim()) && n.id_Hang.Trim().Equals(idHang.Trim())).ToList<tbl_HoaDonBan_Hang>().FirstOrDefault();
                tblNCC.SoLuong = obj.SoLuong;
                
                context.SubmitChanges();
                return true;

            }
            catch (Exception)
            {

                return false;
            }
        }
    }
}
